﻿/*****************************************************************//**
 * @file    FITKAbsGeoModelOperSolid.h
 * @brief   体特征处理数据抽象类。

 * @author  ChengHaotian (yeguangbaozi@foxmail.com)
 * @date    2024-08-26
 *********************************************************************/

#ifndef  FITKABSGEOMODELOPERSOLID_H
#define  FITKABSGEOMODELOPERSOLID_H

#include "FITKAbsGeoModelSolid.h"

#include "FITKInterfaceGeometryAPI.h"

namespace Interface
{
    /**
     * @brief   倒角抽象类。
     * @author  ChengHaotian (yeguangbaozi@foxmail.com)
     * @date    2024-08-20
     */
    class FITKInterfaceGeometryAPI FITKAbsGeoModelChamferSolid : public FITKAbsGeoModelSolid
    {
    public:
        /**
         * @brief   构造函数。
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-08-20
         */
        FITKAbsGeoModelChamferSolid() = default;

        /**
         * @brief   析构函数。[虚函数]
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-08-20
         */
        virtual ~FITKAbsGeoModelChamferSolid() = default;

        /**
         * @brief   获取几何命令类型。[重写]
         * @return  命令类型
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-08-20
         */
        FITKGeoEnum::FITKGeometryComType getGeometryCommandType() override;

        /**
         * @brief   设置被倒角模型的数据ID。
         * @param   cmdId：模型数据ID
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-08-22
         */
        void setInputCmdId(int cmdId);

        /**
         * @brief   获取被倒角模型的数据ID。
         * @return  模型数据ID
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-08-22
         */
        int getInputCmdId();

        /**
         * @brief   设置被倒角的边虚拓扑数据ID列表。
         * @param   edgeIds：边虚拓扑ID列表[引用]
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-08-22
         */
        void setEdgeIds(QList<int> edgeIds);

        /**
         * @brief   获取被倒角的边虚拓扑数据ID列表。
         * @return  边虚拓扑ID列表
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-08-22
         */
        QList<int> & getEgdeIds();

        /**
         * @brief   设置倒角距离。
         * @param   dist：倒角距离
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-08-22
         */
        void setDistance(double dist);

        /**
         * @brief   获取倒角距离。
         * @return  倒角距离
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-08-22
         */
        double getDistance();

    protected:
        /**
         * @brief   进行倒角操作的数据ID。
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-08-20
         */
        int m_solidCmdId = -1;

        /**
         * @brief   进行倒角操作的虚拓扑边索引列表。
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-08-20
         */
        QList<int> m_edgeVirtualIds;

        /**
         * @brief   倒角距离。
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-08-20
         */
        double m_dist = 0.;
    };

    /**
     * @brief   倒圆抽象类。
     * @author  ChengHaotian (yeguangbaozi@foxmail.com)
     * @date    2024-08-20
     */
    class FITKInterfaceGeometryAPI FITKAbsGeoModelFilletSolid : public FITKAbsGeoModelSolid
    {
    public:
        /**
         * @brief   构造函数。
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-08-20
         */
        FITKAbsGeoModelFilletSolid() = default;

        /**
         * @brief   析构函数。[虚函数]
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-08-20
         */
        virtual ~FITKAbsGeoModelFilletSolid() = default;

        /**
         * @brief   获取几何命令类型。[重写]
         * @return  命令类型
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-08-20
         */
        FITKGeoEnum::FITKGeometryComType getGeometryCommandType() override;

        /**
         * @brief   设置被倒圆模型的数据ID。
         * @param   cmdId：模型数据ID
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-08-22
         */
        void setInputCmdId(int cmdId);

        /**
         * @brief   获取被倒圆模型的数据ID。
         * @return  模型数据ID
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-08-22
         */
        int getInputCmdId();

        /**
         * @brief   设置被倒圆的边虚拓扑数据ID列表。
         * @param   edgeIds：边虚拓扑ID列表[引用]
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-08-22
         */
        void setEdgeIds(QList<int> edgeIds);

        /**
         * @brief   获取被倒圆的边虚拓扑数据ID列表。
         * @return  边虚拓扑ID列表
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-08-22
         */
        QList<int> & getEgdeIds();

        /**
         * @brief   设置倒圆半径。
         * @param   radius：倒圆半径
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-08-22
         */
        void setRadius(double radius);

        /**
         * @brief   获取倒圆半径。
         * @return  倒圆半径
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-08-22
         */
        double getRadius();

    protected:
        /**
         * @brief   进行倒角操作的数据ID。
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-08-20
         */
        int m_solidCmdId = -1;

        /**
         * @brief   进行倒圆操作的虚拓扑边索引列表。
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-08-20
         */
        QList<int> m_edgeVirtualIds;

        /**
         * @brief   倒圆半径。
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-08-20
         */
        double m_radius = 0.;
    };

    /**
     * @brief   特征移除抽象类。
     * @author  ChengHaotian (yeguangbaozi@foxmail.com)
     * @date    2024-08-26
     */
    class FITKInterfaceGeometryAPI FITKAbsGeoModelDefeatureSolid : public FITKAbsGeoModelSolid
    {
    public:
        /**
         * @brief   构造函数。
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-08-26
         */
        FITKAbsGeoModelDefeatureSolid() = default;

        /**
         * @brief   析构函数。[虚函数]
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-08-26
         */
        virtual ~FITKAbsGeoModelDefeatureSolid() = default;

        /**
         * @brief   获取几何命令类型。[虚函数][重写]
         * @return  命令类型
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-08-29
         */
        virtual FITKGeoEnum::FITKGeometryComType getGeometryCommandType() override;

        /**
         * @brief   设置被移除特征模型的数据ID。
         * @param   cmdId：模型数据ID
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-08-26
         */
        void setInputCmdId(int cmdId);

        /**
         * @brief   获取被移除特征模型的数据ID。
         * @return  模型数据ID
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-08-26
         */
        int getInputCmdId();

        /**
         * @brief   设置被移除特征面虚拓扑数据ID列表。
         * @param   faceIds：面虚拓扑ID列表
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-08-26
         */
        void setFaceIds(QList<int> faceIds);

        /**
         * @brief   获取被移除特征面虚拓扑数据ID列表。
         * @return  面虚拓扑ID列表[引用]
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-08-26
         */
        QList<int> & getFaceIds();

    protected:
        /**
         * @brief   进行被移除特征操作的体模型数据ID。
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-08-26
         */
        int m_solidCmdId = -1;

        /**
         * @brief   进行倒角操作的虚拓扑面索引列表。
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-08-26
         */
        QList<int> m_faceVirtualIds;

    };

    /**
     * @brief   删除倒角抽象类。
     * @author  ChengHaotian (yeguangbaozi@foxmail.com)
     * @date    2024-08-26
     */
    class FITKInterfaceGeometryAPI FITKAbsGeoModelRemoveChamferSolid : public FITKAbsGeoModelDefeatureSolid
    {
    public:
        /**
         * @brief   构造函数。
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-08-26
         */
        FITKAbsGeoModelRemoveChamferSolid() = default;

        /**
         * @brief   析构函数。[虚函数]
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-08-26
         */
        virtual ~FITKAbsGeoModelRemoveChamferSolid() = default;

        /**
         * @brief   获取几何命令类型。[重写]
         * @return  命令类型
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-08-26
         */
        FITKGeoEnum::FITKGeometryComType getGeometryCommandType() override;

    };

    /**
     * @brief   删除倒圆抽象类。
     * @author  ChengHaotian (yeguangbaozi@foxmail.com)
     * @date    2024-08-26
     */
    class FITKInterfaceGeometryAPI FITKAbsGeoModelRemoveFilletSolid : public FITKAbsGeoModelDefeatureSolid
    {
    public:
        /**
         * @brief   构造函数。
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-08-26
         */
        FITKAbsGeoModelRemoveFilletSolid() = default;

        /**
         * @brief   析构函数。[虚函数]
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-08-26
         */
        virtual ~FITKAbsGeoModelRemoveFilletSolid() = default;

        /**
         * @brief   获取几何命令类型。[重写]
         * @return  命令类型
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-08-26
         */
        FITKGeoEnum::FITKGeometryComType getGeometryCommandType() override;

    };

    /**
     * @brief   填补孔洞抽象类。
     * @author  ChengHaotian (yeguangbaozi@foxmail.com)
     * @date    2024-08-26
     */
    class FITKInterfaceGeometryAPI FITKAbsGeoModelFillHoleSolid : public FITKAbsGeoModelDefeatureSolid
    {
    public:
        /**
         * @brief   构造函数。
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-08-26
         */
        FITKAbsGeoModelFillHoleSolid() = default;

        /**
         * @brief   析构函数。[虚函数]
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-08-26
         */
        virtual ~FITKAbsGeoModelFillHoleSolid() = default;

        /**
         * @brief   获取几何命令类型。[重写]
         * @return  命令类型
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-08-26
         */
        FITKGeoEnum::FITKGeometryComType getGeometryCommandType() override;

    };
}

#endif // !FITKABSGEOMODELOPERSOLID_H
